package oop3.src.ploymorohic;

public class Test {
    public static void main(String[] args) {
        //1.多态的形式:父类 对象名 = new 子类的构造器;
        Animal a = new Dog();
        a.run();//编译看左边,执行看右边(多态注重于方法多态,而成员变量还是优先调用父类的)
        Animal b = new Cat();
        System.out.println(b.age);
        b.run();
        //2.使用父类变量调用子类方法不能调用子类的独有方法,需要通过强制转换类型将对象转换成子类
        Dog dog1 = (Dog)a;
        Cat cat1 = (Cat)b;//如果强制转换的类型和对象不匹配,虽然编译通过但是运行会出错
        dog1.lookDoor();
        cat1.attack();
        //为了解决强转类型不匹配导致的编译不报错问题,使用instanceof语句事先判断对象类型
        Animal a1 = new Cat();
        if(a1 instanceof Dog){
            Dog dog2 = (Dog) a1;
            dog2.lookDoor();
        }
        else if(a1 instanceof Cat){
            Cat cat2 = (Cat) a1;
            cat2.attack();
        }
    }
}
